package gson.stream.cclass;

import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonToken;
import model.User;

import java.io.IOException;
import java.io.StringReader;

public class JsonReaderExample {

    // JsonReader 的 beginArray 方法封装
    public void beginArray(JsonReader reader) throws IOException {
        reader.beginArray(); // 开始读取数组
    }

    // JsonReader 的 beginObject 方法封装
    public void beginObject(JsonReader reader) throws IOException {
        reader.beginObject(); // 开始读取对象
    }

    // JsonReader 的 close 方法封装
    public void close(JsonReader reader) throws IOException {
        reader.close(); // 关闭 JsonReader
    }

    // JsonReader 的 endArray 方法封装
    public void endArray(JsonReader reader) throws IOException {
        reader.endArray(); // 结束读取数组
    }

    // JsonReader 的 endObject 方法封装
    public void endObject(JsonReader reader) throws IOException {
        reader.endObject(); // 结束读取对象
    }

    // JsonReader 的 isLenient 方法封装
    public boolean isLenient(JsonReader reader) {
        return reader.isLenient(); // 判断当前是否是宽松模式
    }

    // JsonReader 的 nextInt 方法封装
    public int nextInt(JsonReader reader) throws IOException {
        return reader.nextInt(); // 读取下一个整数
    }

    // JsonReader 的 nextName 方法封装
    public String nextName(JsonReader reader) throws IOException {
        return reader.nextName(); // 读取下一个名称
    }

    // JsonReader 的 nextNull 方法封装
    public void nextNull(JsonReader reader) throws IOException {
        reader.nextNull(); // 读取下一个空值
    }

    // JsonReader 的 nextString 方法封装
    public String nextString(JsonReader reader) throws IOException {
        return reader.nextString(); // 读取下一个字符串
    }

    // JsonReader 的 peek 方法封装
    public JsonToken peek(JsonReader reader) throws IOException {
        return reader.peek(); // 获取当前的 JsonToken 类型
    }

    // JsonReader 的 setLenient 方法封装
    public void setLenient(JsonReader reader, boolean lenient) {
        reader.setLenient(lenient); // 设置 JsonReader 是否为宽松模式
    }

    // JsonReader 的 skipValue 方法封装
    public void skipValue(JsonReader reader) throws IOException {
        reader.skipValue(); // 跳过当前值
    }

    // 用于从 JSON 字符串中读取并解析 User 对象
    public User parseUserJson(String json) throws IOException {
        JsonReader reader = new JsonReader(new StringReader(json));
        reader.beginObject();
        String userName = "";
        int age = 0;
        String password = "";
        while (reader.hasNext()) {
            String name = reader.nextName();
            if ("userName".equals(name)) {
                userName = reader.nextString();
            } else if ("age".equals(name)) {
                age = reader.nextInt();
            } else if ("password".equals(name)) {
                password = reader.nextString();
            } else {
                reader.skipValue(); // 跳过未知字段
            }
        }
        reader.endObject();
        return new User(userName, age, password);
    }
}
